🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / androidApp / src / google / kotlin / org / meshtastic / app / map / MapViewModel.kt
Displaying Raw • Download
androidApp/src/google/kotlin/org/meshtastic/app/map/MapViewModel.kt 7730823aad5ffe461199820be209e18d09b0ee07 (7730823a) Text, 24.52 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.app.map
Tff7b72import T7ee787android.app.Application
Tff7b72import T7ee787android.net.Uri
Tff7b72import T7ee787androidx.core.net.toFile
Tff7b72import T7ee787androidx.lifecycle.SavedStateHandle
Tff7b72import T7ee787androidx.lifecycle.viewModelScope
Tff7b72import T7ee787co.touchlab.kermit.Logger
Tff7b72import T7ee787com.google.android.gms.maps.model.CameraPosition
Tff7b72import T7ee787com.google.android.gms.maps.model.LatLng
Tff7b72import T7ee787com.google.android.gms.maps.model.TileProvider
Tff7b72import T7ee787com.google.android.gms.maps.model.UrlTileProvider
Tff7b72import T7ee787com.google.maps.android.compose.CameraPositionState
Tff7b72import T7ee787com.google.maps.android.compose.MapType
Tff7b72import T7ee787kotlinx.coroutines.CancellationException
Tff7b72import T7ee787kotlinx.coroutines.flow.Flow
Tff7b72import T7ee787kotlinx.coroutines.flow.MutableSharedFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.MutableStateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.StateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.asFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.asStateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.combine
Tff7b72import T7ee787kotlinx.coroutines.flow.first
Tff7b72import T7ee787kotlinx.coroutines.launch
Tff7b72import T7ee787kotlinx.coroutines.withContext
Tff7b72import T7ee787org.koin.core.annotation.KoinViewModel
Tff7b72import T7ee787org.meshtastic.app.map.model.CustomTileProviderConfig
Tff7b72import T7ee787org.meshtastic.app.map.model.isValidTileUrlTemplate
Tff7b72import T7ee787org.meshtastic.app.map.prefs.map.GoogleCameraPosition
Tff7b72import T7ee787org.meshtastic.app.map.prefs.map.GoogleMapSelectionPrefs
Tff7b72import T7ee787org.meshtastic.app.map.prefs.map.GoogleMapsPrefs
Tff7b72import T7ee787org.meshtastic.app.map.repository.CustomTileProviderRepository
Tff7b72import T7ee787org.meshtastic.app.map.repository.CustomTileProviderSaveResult
Tff7b72import T7ee787org.meshtastic.core.di.CoroutineDispatchers
Tff7b72import T7ee787org.meshtastic.core.model.Node
Tff7b72import T7ee787org.meshtastic.core.model.NodeAddress
Tff7b72import T7ee787org.meshtastic.core.repository.MapPrefs
Tff7b72import T7ee787org.meshtastic.core.repository.MapTileProviderPrefs
Tff7b72import T7ee787org.meshtastic.core.repository.NodeRepository
Tff7b72import T7ee787org.meshtastic.core.repository.NotificationPrefs
Tff7b72import T7ee787org.meshtastic.core.repository.PacketRepository
Tff7b72import T7ee787org.meshtastic.core.repository.RadioConfigRepository
Tff7b72import T7ee787org.meshtastic.core.repository.RadioController
Tff7b72import T7ee787org.meshtastic.core.repository.UiPrefs
Tff7b72import T7ee787org.meshtastic.core.ui.viewmodel.stateInWhileSubscribed
Tff7b72import T7ee787org.meshtastic.feature.map.BaseMapViewModel
Tff7b72import T7ee787java.io.File
Tff7b72import T7ee787java.io.FileOutputStream
Tff7b72import T7ee787java.io.IOException
Tff7b72import T7ee787java.io.InputStream
Tff7b72import T7ee787java.net.MalformedURLException
Tff7b72import T7ee787java.net.URL
Tff7b72import T7ee787kotlin.uuid.Uuid
Tff7b72private Tff7b72const Tff7b72val Te6edf3TILE_SIZE Tff7b72= T79c0ff2T79c0ff5T79c0ff6
Tff7b72enum Tff7b72class T56d364CameraInitialization Tb4b4b4{
Te6edf3LoadingTb4b4b4,
Te6edf3FitNodesTb4b4b4,
Te6edf3RestoredTb4b4b4,
Tb4b4b4}
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffTooManyFunctionsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffLongParameterListTa5d6ff"Tb4b4b4)
Tf0883e@KoinViewModel
Tff7b72class T56d364MapViewModelTb4b4b4(
Tff7b72private Tff7b72val Te6edf3applicationTb4b4b4: Te6edf3ApplicationTb4b4b4,
Tff7b72private Tff7b72val Te6edf3dispatchersTb4b4b4: Te6edf3CoroutineDispatchersTb4b4b4,
Tff7b72private Tff7b72val Te6edf3mapLayersManagerTb4b4b4: Te6edf3MapLayersManagerTb4b4b4,
Te6edf3mapPrefsTb4b4b4: Te6edf3MapPrefsTb4b4b4,
Tff7b72private Tff7b72val Te6edf3googleMapsPrefsTb4b4b4: Te6edf3GoogleMapsPrefsTb4b4b4,
Te6edf3nodeRepositoryTb4b4b4: Te6edf3NodeRepositoryTb4b4b4,
Te6edf3packetRepositoryTb4b4b4: Te6edf3PacketRepositoryTb4b4b4,
Te6edf3radioConfigRepositoryTb4b4b4: Te6edf3RadioConfigRepositoryTb4b4b4,
Te6edf3radioControllerTb4b4b4: Te6edf3RadioControllerTb4b4b4,
Tff7b72private Tff7b72val Te6edf3customTileProviderRepositoryTb4b4b4: Te6edf3CustomTileProviderRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3mapTileProviderPrefsTb4b4b4: Te6edf3MapTileProviderPrefsTb4b4b4,
Te6edf3uiPrefsTb4b4b4: Te6edf3UiPrefsTb4b4b4,
Te6edf3notificationPrefsTb4b4b4: Te6edf3NotificationPrefsTb4b4b4,
Te6edf3savedStateHandleTb4b4b4: Te6edf3SavedStateHandleTb4b4b4,
Tb4b4b4) Tb4b4b4: Te6edf3BaseMapViewModelTb4b4b4(
Te6edf3mapPrefsTb4b4b4,
Te6edf3nodeRepositoryTb4b4b4,
Te6edf3packetRepositoryTb4b4b4,
Te6edf3radioControllerTb4b4b4,
Te6edf3radioConfigRepositoryTb4b4b4,
Te6edf3notificationPrefsTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3_selectedWaypointId Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Te6edf3savedStateHandleTb4b4b4.Te6edf3getTff7b72<Tffa657IntTff7b72>Tb4b4b4(Ta5d6ff"Ta5d6ffwaypointIdTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3selectedWaypointIdTb4b4b4: Te6edf3StateFlowTff7b72<Tffa657Int?Tff7b72> Tff7b72= Te6edf3_selectedWaypointIdTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
T8b949e// Injected by the map provider because this SavedStateHandle is not the Navigation 3 entry's route state.
Tff7b72private Tff7b72val Te6edf3sitePlannerRequestState Tff7b72= Te6edf3SitePlannerRequestStateTb4b4b4(Te6edf3nodeRepositoryTb4b4b4.Te6edf3nodeDBbyNumTb4b4b4)
Tff7b72val Te6edf3sitePlannerRequestTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3Node?Tff7b72> Tff7b72=
Te6edf3sitePlannerRequestStateTb4b4b4.Te6edf3requestTb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Tff7b72nullTb4b4b4)
Tff7b72fun Td2a8ffsetSitePlannerNodeNumTb4b4b4(Te6edf3nodeNumTb4b4b4: Tffa657Int?Tb4b4b4) Tb4b4b4{
Te6edf3sitePlannerRequestStateTb4b4b4.Te6edf3setNodeNumTb4b4b4(Te6edf3nodeNumTb4b4b4)
Tb4b4b4}
Tff7b72fun Td2a8ffconsumeSitePlannerRequestTb4b4b4(Te6edf3nodeNumTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3sitePlannerRequestStateTb4b4b4.Te6edf3consumeTb4b4b4(Te6edf3nodeNumTb4b4b4)
Tb4b4b4}
Tff7b72fun Td2a8ffsetWaypointIdTb4b4b4(Te6edf3idTb4b4b4: Tffa657Int?Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_selectedWaypointIdTb4b4b4.Te6edf3value Tff7b72!Tff7b72= Te6edf3idTb4b4b4) Tb4b4b4{
Te6edf3_selectedWaypointIdTb4b4b4.Te6edf3value Tff7b72= Te6edf3id
Tff7b72if Tb4b4b4(Te6edf3id Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{
Tff7b72val Te6edf3wpMap Tff7b72= Te6edf3waypointsTb4b4b4.Te6edf3first Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3containsKeyTb4b4b4(Te6edf3idTb4b4b4) Tb4b4b4}
Te6edf3wpMapTff7b72[Te6edf3idTff7b72]Tff7b72?.Te6edf3let Tb4b4b4{ Te6edf3packet Tff7b72-Tff7b72>
Tff7b72val Te6edf3waypoint Tff7b72= Te6edf3packetTb4b4b4.Te6edf3waypointTff7b72!!
Tff7b72val Te6edf3latLng Tff7b72= Te6edf3LatLngTb4b4b4(Tb4b4b4(Te6edf3waypointTb4b4b4.Te6edf3latitude_i Tff7b72?: T79c0ff0Tb4b4b4) Tff7b72/ T79c0ff1Te6edf3e7Tb4b4b4, Tb4b4b4(Te6edf3waypointTb4b4b4.Te6edf3longitude_i Tff7b72?: T79c0ff0Tb4b4b4) Tff7b72/ T79c0ff1Te6edf3e7Tb4b4b4)
Te6edf3cameraPositionStateTb4b4b4.Te6edf3position Tff7b72= Te6edf3CameraPositionTb4b4b4.Te6edf3fromLatLngZoomTb4b4b4(Te6edf3latLngTb4b4b4, T79c0ff1T79c0ff5fTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72val Te6edf3cameraPositionState Tff7b72= Te6edf3CameraPositionStateTb4b4b4(Te6edf3CameraPositionTb4b4b4.Te6edf3fromLatLngZoomTb4b4b4(Te6edf3LatLngTb4b4b4(T79c0ff0.0Tb4b4b4, T79c0ff0.0Tb4b4b4)Tb4b4b4, T79c0ff7fTb4b4b4)Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3_cameraInitialization Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Te6edf3CameraInitializationTb4b4b4.Te6edf3LoadingTb4b4b4)
Tff7b72val Te6edf3cameraInitializationTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3CameraInitializationTff7b72> Tff7b72= Te6edf3_cameraInitializationTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3themeTb4b4b4: Te6edf3StateFlowTff7b72<Tffa657IntTff7b72> Tff7b72= Te6edf3uiPrefsTb4b4b4.Te6edf3theme
Tff7b72private Tff7b72val Te6edf3_errorFlow Tff7b72= Te6edf3MutableSharedFlowTff7b72<Tffa657StringTff7b72>Tb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3errorFlowTb4b4b4: Te6edf3FlowTff7b72<Tffa657StringTff7b72> Tff7b72= Te6edf3_errorFlowTb4b4b4.Te6edf3asFlowTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3customTileProviderConfigsTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3ListTff7b72<Te6edf3CustomTileProviderConfigTff7b72>Tff7b72> Tff7b72=
Te6edf3customTileProviderRepositoryTb4b4b4.Te6edf3getCustomTileProvidersTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3_selectedCustomTileProviderId Tff7b72= Te6edf3MutableStateFlowTff7b72<Tffa657String?Tff7b72>Tb4b4b4(Tff7b72nullTb4b4b4)
Tff7b72val Te6edf3selectedCustomTileProviderIdTb4b4b4: Te6edf3StateFlowTff7b72<Tffa657String?Tff7b72> Tff7b72= Te6edf3_selectedCustomTileProviderIdTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3selectedCustomTileProviderTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3CustomTileProviderConfig?Tff7b72> Tff7b72=
Te6edf3combineTb4b4b4(Te6edf3_selectedCustomTileProviderIdTb4b4b4, Te6edf3customTileProviderConfigsTb4b4b4) Tb4b4b4{ Te6edf3selectedIdTb4b4b4, Te6edf3providers Tff7b72-Tff7b72>
Te6edf3providersTb4b4b4.Te6edf3findSelectedCustomTileProviderTb4b4b4(Te6edf3selectedIdTb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Tff7b72nullTb4b4b4)
Tff7b72private Tff7b72val Te6edf3_selectedGoogleMapType Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Te6edf3MapTypeTb4b4b4.Te6edf3NORMALTb4b4b4)
Tff7b72val Te6edf3selectedGoogleMapTypeTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3MapTypeTff7b72> Tff7b72= Te6edf3_selectedGoogleMapTypeTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72fun Td2a8ffaddCustomTileProviderTb4b4b4(Te6edf3nameTb4b4b4: Tffa657StringTb4b4b4, Te6edf3urlTemplateTb4b4b4: Tffa657StringTb4b4b4, Te6edf3localUriTb4b4b4: Tffa657String? Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{
Tff7b72if Tb4b4b4(
Te6edf3nameTb4b4b4.Te6edf3isBlankTb4b4b4(Tb4b4b4) Tff7b72|Tff7b72|
Tb4b4b4(Te6edf3urlTemplateTb4b4b4.Te6edf3isBlankTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3localUri Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tff7b72|Tff7b72|
Tb4b4b4(Te6edf3localUri Tff7b72=Tff7b72= Tff7b72null Tff7b72&Tff7b72& Tff7b72!Te6edf3isValidTileUrlTemplateTb4b4b4(Te6edf3urlTemplateTb4b4b4)Tb4b4b4)
Tb4b4b4) Tb4b4b4{
Te6edf3_errorFlowTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"Ta5d6ffInvalid name, URL template, or local URI for custom tile provider.Ta5d6ff"Tb4b4b4)
Tff7b72returnTf0883e@launch
Tb4b4b4}
Tff7b72var Te6edf3finalLocalUri Tff7b72= Te6edf3localUri
Tff7b72if Tb4b4b4(Te6edf3localUri Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72val Te6edf3uri Tff7b72= Te6edf3UriTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3localUriTb4b4b4)
Tff7b72val Te6edf3extension Tff7b72= Ta5d6ff"Ta5d6ffmbtilesTa5d6ff"
Tff7b72val Te6edf3finalFileName Tff7b72= Ta5d6ff"Ta5d6ffmbtiles_Tffd700${Te6edf3UuidTb4b4b4.Te6edf3randomTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff.Tffd700$Te6edf3extensionTa5d6ff"
Tff7b72val Te6edf3copiedUri Tff7b72= Te6edf3copyFileToInternalStorageTb4b4b4(Te6edf3uriTb4b4b4, Te6edf3finalFileNameTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3copiedUri Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3finalLocalUri Tff7b72= Te6edf3copiedUriTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3_errorFlowTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"Ta5d6ffFailed to copy MBTiles file to internal storage.Ta5d6ff"Tb4b4b4)
Tff7b72returnTf0883e@launch
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3CancellationExceptionTb4b4b4) Tb4b4b4{
Tff7b72throw Te6edf3e T8b949e// A cancelled copy (ViewModel cleared) is not a processing failure.
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3withTagTb4b4b4(Ta5d6ff"Ta5d6ffMapViewModelTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3eTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffError processing local URITa5d6ff" Tb4b4b4}
Te6edf3_errorFlowTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"Ta5d6ffError processing local URI for MBTiles.Ta5d6ff"Tb4b4b4)
Tff7b72returnTf0883e@launch
Tb4b4b4}
Tb4b4b4}
Tff7b72val Te6edf3newConfig Tff7b72= Te6edf3CustomTileProviderConfigTb4b4b4(Te6edf3name Tff7b72= Te6edf3nameTb4b4b4, Te6edf3urlTemplate Tff7b72= Te6edf3urlTemplateTb4b4b4, Te6edf3localUri Tff7b72= Te6edf3finalLocalUriTb4b4b4)
Tff7b72when Tb4b4b4(Te6edf3customTileProviderRepositoryTb4b4b4.Te6edf3addCustomTileProviderTb4b4b4(Te6edf3newConfigTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3CustomTileProviderSaveResultTb4b4b4.Te6edf3SAVED Tff7b72-Tff7b72> Tffa657Unit
Te6edf3CustomTileProviderSaveResultTb4b4b4.Te6edf3DUPLICATE_NAME Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3finalLocalUriTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3deleteFileToInternalStorageTb4b4b4(Te6edf3UriTb4b4b4.Te6edf3parseTb4b4b4(Tffa657itTb4b4b4)Tb4b4b4) Tb4b4b4}
Te6edf3_errorFlowTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"Ta5d6ffCustom tile provider with name 'Tffd700$Te6edf3nameTa5d6ff' already exists.Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Te6edf3CustomTileProviderSaveResultTb4b4b4.Te6edf3NOT_FOUND Tff7b72-Tff7b72> Te6edf3_errorFlowTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"Ta5d6ffFailed to save custom tile provider.Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffaddCustomTileProviderTb4b4b4(Te6edf3configTb4b4b4: Te6edf3CustomTileProviderConfigTb4b4b4) Tb4b4b4{
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{
Tff7b72val Te6edf3normalized Tff7b72= Te6edf3configTb4b4b4.Te6edf3normalizedTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3normalizedTb4b4b4.Te6edf3nameTb4b4b4.Te6edf3isBlankTb4b4b4(Tb4b4b4) Tff7b72|Tff7b72| Tff7b72!Te6edf3normalizedTb4b4b4.Te6edf3hasValidGoogleTileSourceTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3_errorFlowTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"Ta5d6ffInvalid custom tile provider configuration.Ta5d6ff"Tb4b4b4)
Tff7b72returnTf0883e@launch
Tb4b4b4}
Tff7b72when Tb4b4b4(Te6edf3customTileProviderRepositoryTb4b4b4.Te6edf3addCustomTileProviderTb4b4b4(Te6edf3normalizedTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3CustomTileProviderSaveResultTb4b4b4.Te6edf3SAVED Tff7b72-Tff7b72> Tffa657Unit
Te6edf3CustomTileProviderSaveResultTb4b4b4.Te6edf3DUPLICATE_NAME Tff7b72-Tff7b72>
Te6edf3_errorFlowTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"Ta5d6ffCustom tile provider with that name already exists.Ta5d6ff"Tb4b4b4)
Te6edf3CustomTileProviderSaveResultTb4b4b4.Te6edf3NOT_FOUND Tff7b72-Tff7b72> Te6edf3_errorFlowTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"Ta5d6ffFailed to save custom tile provider.Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffupdateCustomTileProviderTb4b4b4(Te6edf3configToUpdateTb4b4b4: Te6edf3CustomTileProviderConfigTb4b4b4) Tb4b4b4{
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{
Tff7b72val Te6edf3normalized Tff7b72= Te6edf3configToUpdateTb4b4b4.Te6edf3normalizedTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(
Te6edf3normalizedTb4b4b4.Te6edf3nameTb4b4b4.Te6edf3isBlankTb4b4b4(Tb4b4b4) Tff7b72|Tff7b72|
Tb4b4b4(Te6edf3normalizedTb4b4b4.Te6edf3urlTemplateTb4b4b4.Te6edf3isBlankTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3normalizedTb4b4b4.Te6edf3localUri Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tff7b72|Tff7b72|
Tb4b4b4(Te6edf3normalizedTb4b4b4.Te6edf3localUri Tff7b72=Tff7b72= Tff7b72null Tff7b72&Tff7b72& Tff7b72!Te6edf3isValidTileUrlTemplateTb4b4b4(Te6edf3normalizedTb4b4b4.Te6edf3urlTemplateTb4b4b4)Tb4b4b4)
Tb4b4b4) Tb4b4b4{
Te6edf3_errorFlowTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"Ta5d6ffInvalid name, URL template, or local URI for updating custom tile provider.Ta5d6ff"Tb4b4b4)
Tff7b72returnTf0883e@launch
Tb4b4b4}
Tff7b72when Tb4b4b4(Te6edf3customTileProviderRepositoryTb4b4b4.Te6edf3updateCustomTileProviderTb4b4b4(Te6edf3normalizedTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3CustomTileProviderSaveResultTb4b4b4.Te6edf3SAVED Tff7b72-Tff7b72> Tffa657Unit
Te6edf3CustomTileProviderSaveResultTb4b4b4.Te6edf3DUPLICATE_NAME Tff7b72-Tff7b72>
Te6edf3_errorFlowTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"Ta5d6ffAnother custom tile provider with name 'Tffd700${Te6edf3normalizedTb4b4b4.Te6edf3nameTffd700}Ta5d6ff' already exists.Ta5d6ff"Tb4b4b4)
Te6edf3CustomTileProviderSaveResultTb4b4b4.Te6edf3NOT_FOUND Tff7b72-Tff7b72> Te6edf3_errorFlowTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"Ta5d6ffCustom tile provider no longer exists.Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffremoveCustomTileProviderTb4b4b4(Te6edf3configIdTb4b4b4: Tffa657StringTb4b4b4) Tb4b4b4{
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{
Tff7b72val Te6edf3configToRemove Tff7b72= Te6edf3customTileProviderRepositoryTb4b4b4.Te6edf3getCustomTileProviderByIdTb4b4b4(Te6edf3configIdTb4b4b4)
Tff7b72val Te6edf3wasSelected Tff7b72= Te6edf3_selectedCustomTileProviderIdTb4b4b4.Te6edf3value Tff7b72=Tff7b72= Te6edf3configId
Te6edf3customTileProviderRepositoryTb4b4b4.Te6edf3deleteCustomTileProviderTb4b4b4(Te6edf3configIdTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3configToRemove Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3wasSelectedTb4b4b4) Tb4b4b4{
Te6edf3clearCurrentTileProviderTb4b4b4(Tb4b4b4)
Te6edf3_selectedCustomTileProviderIdTb4b4b4.Te6edf3value Tff7b72= Tff7b72null
Te6edf3_selectedGoogleMapTypeTb4b4b4.Te6edf3value Tff7b72= Te6edf3MapTypeTb4b4b4.Te6edf3NORMAL
Te6edf3mapTileProviderPrefsTb4b4b4.Te6edf3setSelectedCustomTileProviderIdTb4b4b4(Tff7b72nullTb4b4b4)
Te6edf3googleMapsPrefsTb4b4b4.Te6edf3setSelectedCustomTileUrlTb4b4b4(Tff7b72nullTb4b4b4)
Te6edf3googleMapsPrefsTb4b4b4.Te6edf3setSelectedGoogleMapTypeTb4b4b4(Te6edf3MapTypeTb4b4b4.Te6edf3NORMALTb4b4b4.Te6edf3nameTb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3configToRemoveTb4b4b4.Te6edf3localUri Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3uri Tff7b72= Te6edf3UriTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3configToRemoveTb4b4b4.Te6edf3localUriTb4b4b4)
Te6edf3deleteFileToInternalStorageTb4b4b4(Te6edf3uriTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffselectCustomTileProviderTb4b4b4(Te6edf3configTb4b4b4: Te6edf3CustomTileProviderConfig?Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3config Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3configTb4b4b4.Te6edf3isLocal Tff7b72&Tff7b72& Tff7b72!Te6edf3isValidTileUrlTemplateTb4b4b4(Te6edf3configTb4b4b4.Te6edf3urlTemplateTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3withTagTb4b4b4(Ta5d6ff"Ta5d6ffMapViewModelTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3wTb4b4b4(Ta5d6ff"Ta5d6ffAttempted to select an invalid custom tile URL templateTa5d6ff"Tb4b4b4)
Te6edf3clearCurrentTileProviderTb4b4b4(Tb4b4b4)
Te6edf3_selectedCustomTileProviderIdTb4b4b4.Te6edf3value Tff7b72= Tff7b72null
Te6edf3_selectedGoogleMapTypeTb4b4b4.Te6edf3value Tff7b72= Te6edf3MapTypeTb4b4b4.Te6edf3NORMAL
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3mapTileProviderPrefsTb4b4b4.Te6edf3setSelectedCustomTileProviderIdTb4b4b4(Tff7b72nullTb4b4b4) Tb4b4b4}
Te6edf3googleMapsPrefsTb4b4b4.Te6edf3setSelectedCustomTileUrlTb4b4b4(Tff7b72nullTb4b4b4)
Te6edf3googleMapsPrefsTb4b4b4.Te6edf3setSelectedGoogleMapTypeTb4b4b4(Te6edf3MapTypeTb4b4b4.Te6edf3NORMALTb4b4b4.Te6edf3nameTb4b4b4)
Tff7b72return
Tb4b4b4}
Te6edf3_selectedCustomTileProviderIdTb4b4b4.Te6edf3value Tff7b72= Te6edf3configTb4b4b4.Te6edf3id
Te6edf3_selectedGoogleMapTypeTb4b4b4.Te6edf3value Tff7b72= Te6edf3MapTypeTb4b4b4.Te6edf3NONE
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3mapTileProviderPrefsTb4b4b4.Te6edf3setSelectedCustomTileProviderIdTb4b4b4(Te6edf3configTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4}
Te6edf3googleMapsPrefsTb4b4b4.Te6edf3setSelectedCustomTileUrlTb4b4b4(Tff7b72nullTb4b4b4)
Te6edf3googleMapsPrefsTb4b4b4.Te6edf3setSelectedGoogleMapTypeTb4b4b4(Tff7b72nullTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3clearCurrentTileProviderTb4b4b4(Tb4b4b4)
Te6edf3_selectedCustomTileProviderIdTb4b4b4.Te6edf3value Tff7b72= Tff7b72null
Te6edf3_selectedGoogleMapTypeTb4b4b4.Te6edf3value Tff7b72= Te6edf3MapTypeTb4b4b4.Te6edf3NORMAL
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3mapTileProviderPrefsTb4b4b4.Te6edf3setSelectedCustomTileProviderIdTb4b4b4(Tff7b72nullTb4b4b4) Tb4b4b4}
Te6edf3googleMapsPrefsTb4b4b4.Te6edf3setSelectedCustomTileUrlTb4b4b4(Tff7b72nullTb4b4b4)
Te6edf3googleMapsPrefsTb4b4b4.Te6edf3setSelectedGoogleMapTypeTb4b4b4(Te6edf3MapTypeTb4b4b4.Te6edf3NORMALTb4b4b4.Te6edf3nameTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffsetSelectedGoogleMapTypeTb4b4b4(Te6edf3mapTypeTb4b4b4: Te6edf3MapTypeTb4b4b4) Tb4b4b4{
Te6edf3clearCurrentTileProviderTb4b4b4(Tb4b4b4)
Te6edf3_selectedGoogleMapTypeTb4b4b4.Te6edf3value Tff7b72= Te6edf3mapType
Te6edf3_selectedCustomTileProviderIdTb4b4b4.Te6edf3value Tff7b72= Tff7b72null
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3mapTileProviderPrefsTb4b4b4.Te6edf3setSelectedCustomTileProviderIdTb4b4b4(Tff7b72nullTb4b4b4) Tb4b4b4}
Te6edf3googleMapsPrefsTb4b4b4.Te6edf3setSelectedGoogleMapTypeTb4b4b4(Te6edf3mapTypeTb4b4b4.Te6edf3nameTb4b4b4)
Te6edf3googleMapsPrefsTb4b4b4.Te6edf3setSelectedCustomTileUrlTb4b4b4(Tff7b72nullTb4b4b4)
Tb4b4b4}
Tff7b72private Tff7b72var Te6edf3currentTileProviderTb4b4b4: Te6edf3TileProvider? Tff7b72= Tff7b72null
Tff7b72private Tff7b72var Te6edf3currentTileProviderConfigTb4b4b4: Te6edf3CustomTileProviderConfig? Tff7b72= Tff7b72null
Tff7b72fun Td2a8ffgetTileProviderTb4b4b4(Te6edf3configTb4b4b4: Te6edf3CustomTileProviderConfig?Tb4b4b4)Tb4b4b4: Te6edf3TileProvider? Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3config Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3clearCurrentTileProviderTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72null
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTileProvider Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3currentTileProviderConfig Tff7b72=Tff7b72= Te6edf3configTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3currentTileProvider
Tb4b4b4}
Te6edf3clearCurrentTileProviderTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3newProvider Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3configTb4b4b4.Te6edf3isLocalTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3uri Tff7b72= Te6edf3UriTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3configTb4b4b4.Te6edf3localUriTb4b4b4)
Tff7b72val Te6edf3file Tff7b72=
Tff7b72try Tb4b4b4{
Te6edf3uriTb4b4b4.Te6edf3toFileTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Te6edf3FileTb4b4b4(Te6edf3uriTb4b4b4.Te6edf3path Tff7b72?: Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3fileTb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3MBTilesProviderTb4b4b4(Te6edf3fileTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3withTagTb4b4b4(Ta5d6ff"Ta5d6ffMapViewModelTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3wTb4b4b4(Ta5d6ff"Ta5d6ffSelected local MBTiles file does not existTa5d6ff"Tb4b4b4)
Tff7b72null
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72val Te6edf3urlString Tff7b72= Te6edf3configTb4b4b4.Te6edf3urlTemplate
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isValidTileUrlTemplateTb4b4b4(Te6edf3urlStringTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3withTagTb4b4b4(Ta5d6ff"Ta5d6ffMapViewModelTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3wTb4b4b4(Ta5d6ff"Ta5d6ffSelected custom tile URL template is invalidTa5d6ff"Tb4b4b4)
Tff7b72null
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72object Tb4b4b4: T56d364UrlTileProviderTb4b4b4(Te6edf3TILE_SIZETb4b4b4, Te6edf3TILE_SIZETb4b4b4) Tb4b4b4{
Tff7b72override Tff7b72fun Td2a8ffgetTileUrlTb4b4b4(Te6edf3xTb4b4b4: Tffa657IntTb4b4b4, Te6edf3yTb4b4b4: Tffa657IntTb4b4b4, Te6edf3zoomTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Te6edf3URL? Tb4b4b4{
Tff7b72val Te6edf3subdomains Tff7b72= Te6edf3listOfTb4b4b4(Ta5d6ff"Ta5d6ffaTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3subdomain Tff7b72= Te6edf3subdomainsTff7b72[Tb4b4b4(Te6edf3x Tff7b72+ Te6edf3yTb4b4b4) Tff7b72% Te6edf3subdomainsTb4b4b4.Te6edf3sizeTff7b72]
Tff7b72val Te6edf3formattedUrl Tff7b72=
Te6edf3urlString
Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff"Ta5d6ff{s}Ta5d6ff"Tb4b4b4, Te6edf3subdomainTb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4)
Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff"Ta5d6ff{z}Ta5d6ff"Tb4b4b4, Te6edf3zoomTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4)
Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff"Ta5d6ff{x}Ta5d6ff"Tb4b4b4, Te6edf3xTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4)
Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff"Ta5d6ff{y}Ta5d6ff"Tb4b4b4, Te6edf3yTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4)
Tff7b72return Tff7b72try Tb4b4b4{
Te6edf3URLTb4b4b4(Te6edf3formattedUrlTb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3_Tb4b4b4: Te6edf3MalformedURLExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3withTagTb4b4b4(Ta5d6ff"Ta5d6ffMapViewModelTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3wTb4b4b4(Ta5d6ff"Ta5d6ffCustom tile provider produced a malformed URLTa5d6ff"Tb4b4b4)
Tff7b72null
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Te6edf3currentTileProvider Tff7b72= Te6edf3newProvider
Te6edf3currentTileProviderConfig Tff7b72= Te6edf3configTb4b4b4.Te6edf3takeIf Tb4b4b4{ Te6edf3newProvider Tff7b72!Tff7b72= Tff7b72null Tb4b4b4}
Tff7b72return Te6edf3newProvider
Tb4b4b4}
Tff7b72private Tff7b72fun Td2a8ffisValidTileUrlTemplateTb4b4b4(Te6edf3urlTemplateTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72=
Te6edf3urlTemplateTb4b4b4.Te6edf3isValidTileUrlTemplateTb4b4b4(Te6edf3requireHttps Tff7b72= Tff7b72falseTb4b4b4)
Tff7b72private Tff7b72fun Td2a8ffclearCurrentTileProviderTb4b4b4(Tb4b4b4) Tb4b4b4{
Tb4b4b4(Te6edf3currentTileProvider Tff7b72as? Te6edf3MBTilesProviderTb4b4b4)Tff7b72?.Te6edf3closeTb4b4b4(Tb4b4b4)
Te6edf3currentTileProvider Tff7b72= Tff7b72null
Te6edf3currentTileProviderConfig Tff7b72= Tff7b72null
Tb4b4b4}
T8b949e/** Imported overlay layers; owned by the flavor-neutral [MapLayersManager] and rendered by [MapLayerOverlay]. */
Tff7b72val Te6edf3mapLayersTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3ListTff7b72<Te6edf3MapLayerItemTff7b72>Tff7b72> Tff7b72= Te6edf3mapLayersManagerTb4b4b4.Te6edf3mapLayers
Tff7b72init Tb4b4b4{
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{
Tff7b72val Te6edf3savedCamera Tff7b72= Te6edf3googleMapsPrefsTb4b4b4.Te6edf3cameraPositionTb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3savedCamera Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3_cameraInitializationTb4b4b4.Te6edf3value Tff7b72= Te6edf3CameraInitializationTb4b4b4.Te6edf3FitNodes
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3cameraPositionStateTb4b4b4.Te6edf3position Tff7b72= Te6edf3savedCameraTb4b4b4.Te6edf3toCameraPositionTb4b4b4(Tb4b4b4)
Te6edf3_cameraInitializationTb4b4b4.Te6edf3value Tff7b72= Te6edf3CameraInitializationTb4b4b4.Te6edf3Restored
Tb4b4b4}
Tb4b4b4}
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{
Tff7b72val Te6edf3providerLoad Tff7b72= Te6edf3customTileProviderRepositoryTb4b4b4.Te6edf3awaitCustomTileProvidersTb4b4b4(Tb4b4b4)
Te6edf3loadPersistedMapTypeTb4b4b4(
Te6edf3providers Tff7b72= Te6edf3providerLoadTb4b4b4.Te6edf3providersTb4b4b4,
Te6edf3providerLoadSuccessful Tff7b72= Te6edf3providerLoadTb4b4b4.Te6edf3isSuccessfulTb4b4b4,
Te6edf3selection Tff7b72= Te6edf3googleMapsPrefsTb4b4b4.Te6edf3awaitMapSelectionTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3selectedProviderId Tff7b72= Te6edf3mapTileProviderPrefsTb4b4b4.Te6edf3awaitSelectedCustomTileProviderIdTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3selectedWaypointIdTb4b4b4.Te6edf3valueTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3wpId Tff7b72-Tff7b72>
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{
Tff7b72val Te6edf3wpMap Tff7b72= Te6edf3waypointsTb4b4b4.Te6edf3first Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3containsKeyTb4b4b4(Te6edf3wpIdTb4b4b4) Tb4b4b4}
Te6edf3wpMapTff7b72[Te6edf3wpIdTff7b72]Tff7b72?.Te6edf3let Tb4b4b4{ Te6edf3packet Tff7b72-Tff7b72>
Tff7b72val Te6edf3waypoint Tff7b72= Te6edf3packetTb4b4b4.Te6edf3waypointTff7b72!!
Tff7b72val Te6edf3latLng Tff7b72= Te6edf3LatLngTb4b4b4(Tb4b4b4(Te6edf3waypointTb4b4b4.Te6edf3latitude_i Tff7b72?: T79c0ff0Tb4b4b4) Tff7b72/ T79c0ff1Te6edf3e7Tb4b4b4, Tb4b4b4(Te6edf3waypointTb4b4b4.Te6edf3longitude_i Tff7b72?: T79c0ff0Tb4b4b4) Tff7b72/ T79c0ff1Te6edf3e7Tb4b4b4)
Te6edf3cameraPositionStateTb4b4b4.Te6edf3position Tff7b72= Te6edf3CameraPositionTb4b4b4.Te6edf3fromLatLngZoomTb4b4b4(Te6edf3latLngTb4b4b4, T79c0ff1T79c0ff5fTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffsaveCameraPositionTb4b4b4(Te6edf3cameraPositionTb4b4b4: Te6edf3CameraPositionTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_cameraInitializationTb4b4b4.Te6edf3value Tff7b72!Tff7b72= Te6edf3CameraInitializationTb4b4b4.Te6edf3RestoredTb4b4b4) Tff7b72return
Te6edf3googleMapsPrefsTb4b4b4.Te6edf3setCameraPositionTb4b4b4(Te6edf3cameraPositionTb4b4b4.Te6edf3toMapCameraPositionTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tff7b72fun Td2a8ffonInitialNodeBoundsAppliedTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3_cameraInitializationTb4b4b4.Te6edf3value Tff7b72= Te6edf3CameraInitializationTb4b4b4.Te6edf3Restored
Te6edf3saveCameraPositionTb4b4b4(Te6edf3cameraPositionStateTb4b4b4.Te6edf3positionTb4b4b4)
Tb4b4b4}
Tff7b72private Tff7b72suspend Tff7b72fun Td2a8ffloadPersistedMapTypeTb4b4b4(
Te6edf3providersTb4b4b4: Te6edf3ListTff7b72<Te6edf3CustomTileProviderConfigTff7b72>Tb4b4b4,
Te6edf3providerLoadSuccessfulTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3selectionTb4b4b4: Te6edf3GoogleMapSelectionPrefsTb4b4b4,
Te6edf3selectedProviderIdTb4b4b4: Tffa657String?Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3resolvedSelection Tff7b72=
Te6edf3providersTb4b4b4.Te6edf3resolvePersistedCustomTileSelectionTb4b4b4(
Te6edf3selectedProviderId Tff7b72= Te6edf3selectedProviderIdTb4b4b4,
Te6edf3legacySource Tff7b72= Te6edf3selectionTb4b4b4.Te6edf3customTileUrlTb4b4b4,
Te6edf3providerLoadSuccessful Tff7b72= Te6edf3providerLoadSuccessfulTb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3selectedProvider Tff7b72= Te6edf3resolvedSelectionTb4b4b4.Te6edf3provider
Tff7b72if Tb4b4b4(Te6edf3selectedProvider Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3_selectedCustomTileProviderIdTb4b4b4.Te6edf3value Tff7b72= Te6edf3selectedProviderTb4b4b4.Te6edf3id
Te6edf3_selectedGoogleMapTypeTb4b4b4.Te6edf3value Tff7b72= Te6edf3MapTypeTb4b4b4.Te6edf3NONE
Tff7b72if Tb4b4b4(Te6edf3selectedProviderId Tff7b72!Tff7b72= Te6edf3selectedProviderTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{
Te6edf3mapTileProviderPrefsTb4b4b4.Te6edf3setSelectedCustomTileProviderIdTb4b4b4(Te6edf3selectedProviderTb4b4b4.Te6edf3idTb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3selectionTb4b4b4.Te6edf3customTileUrl Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Te6edf3googleMapsPrefsTb4b4b4.Te6edf3setSelectedCustomTileUrlTb4b4b4(Tff7b72nullTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3_selectedCustomTileProviderIdTb4b4b4.Te6edf3value Tff7b72= Tff7b72null
Tff7b72if Tb4b4b4(Te6edf3resolvedSelectionTb4b4b4.Te6edf3canDiscardMissingSelectionTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3selectedProviderId Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Te6edf3mapTileProviderPrefsTb4b4b4.Te6edf3setSelectedCustomTileProviderIdTb4b4b4(Tff7b72nullTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3selectionTb4b4b4.Te6edf3customTileUrl Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Te6edf3googleMapsPrefsTb4b4b4.Te6edf3setSelectedCustomTileUrlTb4b4b4(Tff7b72nullTb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3providerLoadSuccessful Tff7b72&Tff7b72& Tb4b4b4(Te6edf3selectedProviderId Tff7b72!Tff7b72= Tff7b72null Tff7b72|Tff7b72| Te6edf3selectionTb4b4b4.Te6edf3customTileUrl Tff7b72!Tff7b72= Tff7b72nullTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3_selectedGoogleMapTypeTb4b4b4.Te6edf3value Tff7b72= Te6edf3MapTypeTb4b4b4.Te6edf3NORMAL
Tff7b72return
Tb4b4b4}
Tff7b72try Tb4b4b4{
Te6edf3_selectedGoogleMapTypeTb4b4b4.Te6edf3value Tff7b72= Te6edf3MapTypeTb4b4b4.Te6edf3valueOfTb4b4b4(Te6edf3selectionTb4b4b4.Te6edf3mapTypeTb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3_Tb4b4b4: Te6edf3IllegalArgumentExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3w Tb4b4b4{ Ta5d6ff"Ta5d6ffIgnoring an invalid saved Google Map typeTa5d6ff" Tb4b4b4}
Te6edf3_selectedGoogleMapTypeTb4b4b4.Te6edf3value Tff7b72= Te6edf3MapTypeTb4b4b4.Te6edf3NORMAL
Te6edf3googleMapsPrefsTb4b4b4.Te6edf3setSelectedGoogleMapTypeTb4b4b4(Tff7b72nullTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffaddMapLayerTb4b4b4(Te6edf3uriTb4b4b4: Te6edf3UriTb4b4b4, Te6edf3fileNameTb4b4b4: Tffa657String?Tb4b4b4) Tff7b72= Te6edf3mapLayersManagerTb4b4b4.Te6edf3addMapLayerTb4b4b4(Te6edf3uriTb4b4b4, Te6edf3fileNameTb4b4b4)
Tff7b72fun Td2a8ffaddNetworkMapLayerTb4b4b4(Te6edf3nameTb4b4b4: Tffa657StringTb4b4b4, Te6edf3urlTb4b4b4: Tffa657StringTb4b4b4) Tb4b4b4{
Te6edf3mapLayersManagerTb4b4b4.Te6edf3addNetworkMapLayerTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3urlTb4b4b4)Tff7b72?.Te6edf3let Tb4b4b4{ Te6edf3error Tff7b72-Tff7b72>
Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3_errorFlowTb4b4b4.Te6edf3emitTb4b4b4(Te6edf3errorTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72private Tff7b72suspend Tff7b72fun Td2a8ffcopyFileToInternalStorageTb4b4b4(Te6edf3uriTb4b4b4: Te6edf3UriTb4b4b4, Te6edf3fileNameTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Te6edf3Uri? Tff7b72= Te6edf3withContextTb4b4b4(Te6edf3dispatchersTb4b4b4.Te6edf3ioTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72val Te6edf3inputStream Tff7b72= Te6edf3applicationTb4b4b4.Te6edf3contentResolverTb4b4b4.Te6edf3openInputStreamTb4b4b4(Te6edf3uriTb4b4b4)
Tff7b72val Te6edf3directory Tff7b72= Te6edf3FileTb4b4b4(Te6edf3applicationTb4b4b4.Te6edf3filesDirTb4b4b4, Ta5d6ff"Ta5d6ffmap_layersTa5d6ff"Tb4b4b4)
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3directoryTb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3directoryTb4b4b4.Te6edf3mkdirsTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3outputFile Tff7b72= Te6edf3FileTb4b4b4(Te6edf3directoryTb4b4b4, Te6edf3fileNameTb4b4b4)
Tff7b72val Te6edf3outputStream Tff7b72= Te6edf3FileOutputStreamTb4b4b4(Te6edf3outputFileTb4b4b4)
Te6edf3inputStreamTff7b72?.Te6edf3use Tb4b4b4{ Te6edf3input Tff7b72-Tff7b72> Te6edf3outputStreamTb4b4b4.Te6edf3use Tb4b4b4{ Te6edf3output Tff7b72-Tff7b72> Te6edf3inputTb4b4b4.Te6edf3copyToTb4b4b4(Te6edf3outputTb4b4b4) Tb4b4b4} Tb4b4b4}
Te6edf3UriTb4b4b4.Te6edf3fromFileTb4b4b4(Te6edf3outputFileTb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3IOExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3withTagTb4b4b4(Ta5d6ff"Ta5d6ffMapViewModelTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3eTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffError copying file to internal storageTa5d6ff" Tb4b4b4}
Tff7b72null
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffaddGeoJsonLayerTb4b4b4(Te6edf3nameTb4b4b4: Tffa657StringTb4b4b4, Te6edf3geoJsonTb4b4b4: Tffa657StringTb4b4b4) Tff7b72= Te6edf3mapLayersManagerTb4b4b4.Te6edf3addGeoJsonLayerTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3geoJsonTb4b4b4)
Tff7b72fun Td2a8fftoggleLayerVisibilityTb4b4b4(Te6edf3layerIdTb4b4b4: Tffa657StringTb4b4b4) Tff7b72= Te6edf3mapLayersManagerTb4b4b4.Te6edf3toggleLayerVisibilityTb4b4b4(Te6edf3layerIdTb4b4b4)
Tff7b72fun Td2a8ffremoveMapLayerTb4b4b4(Te6edf3layerIdTb4b4b4: Tffa657StringTb4b4b4) Tff7b72= Te6edf3mapLayersManagerTb4b4b4.Te6edf3removeMapLayerTb4b4b4(Te6edf3layerIdTb4b4b4)
Tff7b72fun Td2a8ffrefreshMapLayerTb4b4b4(Te6edf3layerIdTb4b4b4: Tffa657StringTb4b4b4) Tff7b72= Te6edf3mapLayersManagerTb4b4b4.Te6edf3refreshMapLayerTb4b4b4(Te6edf3layerIdTb4b4b4)
Tff7b72fun Td2a8ffrefreshAllVisibleNetworkLayersTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3mapLayersManagerTb4b4b4.Te6edf3refreshAllVisibleNetworkLayersTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72suspend Tff7b72fun Td2a8ffdeleteFileToInternalStorageTb4b4b4(Te6edf3uriTb4b4b4: Te6edf3UriTb4b4b4) Tb4b4b4{
Te6edf3withContextTb4b4b4(Te6edf3dispatchersTb4b4b4.Te6edf3ioTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72val Te6edf3file Tff7b72= Te6edf3uriTb4b4b4.Te6edf3toFileTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3fileTb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3fileTb4b4b4.Te6edf3deleteTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3withTagTb4b4b4(Ta5d6ff"Ta5d6ffMapViewModelTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3eTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffError deleting file from internal storageTa5d6ff" Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72suspend Tff7b72fun Td2a8ffgetInputStreamFromUriTb4b4b4(Te6edf3layerItemTb4b4b4: Te6edf3MapLayerItemTb4b4b4)Tb4b4b4: Te6edf3InputStream? Tff7b72=
Te6edf3mapLayersManagerTb4b4b4.Te6edf3getInputStreamFromUriTb4b4b4(Te6edf3layerItemTb4b4b4)
Tff7b72override Tff7b72fun Td2a8ffonClearedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onClearedTb4b4b4(Tb4b4b4)
Tb4b4b4(Te6edf3currentTileProvider Tff7b72as? Te6edf3MBTilesProviderTb4b4b4)Tff7b72?.Te6edf3closeTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tff7b72override Tff7b72fun Td2a8ffgetUserTb4b4b4(Te6edf3userIdTb4b4b4: Tffa657String?Tb4b4b4) Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3getUserTb4b4b4(Te6edf3userId Tff7b72?: Te6edf3NodeAddressTb4b4b4.Te6edf3ID_BROADCASTTb4b4b4)
Tb4b4b4}
Tff7b72internal Tff7b72fun Td2a8ffListTff7b72<Te6edf3CustomTileProviderConfigTff7b72>Tb4b4b4.Te6edf3findSelectedCustomTileProviderTb4b4b4(
Te6edf3selectedProviderIdTb4b4b4: Tffa657String?Tb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3CustomTileProviderConfig? Tff7b72= Te6edf3singleOrNull Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3id Tff7b72=Tff7b72= Te6edf3selectedProviderId Tb4b4b4}
Tff7b72internal Tff7b72fun Td2a8ffListTff7b72<Te6edf3CustomTileProviderConfigTff7b72>Tb4b4b4.Te6edf3findLegacyCustomTileProviderTb4b4b4(
Te6edf3legacySourceTb4b4b4: Tffa657String?Tb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3CustomTileProviderConfig? Tff7b72= Te6edf3legacySourceTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3source Tff7b72-Tff7b72> Te6edf3firstOrNull Tb4b4b4{ Tb4b4b4(Tffa657itTb4b4b4.Te6edf3localUri Tff7b72?: Tffa657itTb4b4b4.Te6edf3urlTemplateTb4b4b4) Tff7b72=Tff7b72= Te6edf3source Tb4b4b4} Tb4b4b4}
Tff7b72internal Tff7b72data Tff7b72class T56d364PersistedCustomTileSelectionTb4b4b4(
Tff7b72val Te6edf3providerTb4b4b4: Te6edf3CustomTileProviderConfig?Tb4b4b4,
Tff7b72val Te6edf3canDiscardMissingSelectionTb4b4b4: Tffa657BooleanTb4b4b4,
Tb4b4b4)
Tff7b72internal Tff7b72fun Td2a8ffListTff7b72<Te6edf3CustomTileProviderConfigTff7b72>Tb4b4b4.Te6edf3resolvePersistedCustomTileSelectionTb4b4b4(
Te6edf3selectedProviderIdTb4b4b4: Tffa657String?Tb4b4b4,
Te6edf3legacySourceTb4b4b4: Tffa657String?Tb4b4b4,
Te6edf3providerLoadSuccessfulTb4b4b4: Tffa657BooleanTb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3PersistedCustomTileSelection Tb4b4b4{
Tff7b72val Te6edf3provider Tff7b72=
Te6edf3listOfNotNullTb4b4b4(Te6edf3findSelectedCustomTileProviderTb4b4b4(Te6edf3selectedProviderIdTb4b4b4)Tb4b4b4, Te6edf3findLegacyCustomTileProviderTb4b4b4(Te6edf3legacySourceTb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3firstOrNull Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3hasValidGoogleTileSourceTb4b4b4(Tb4b4b4) Tb4b4b4}
Tff7b72return Te6edf3PersistedCustomTileSelectionTb4b4b4(
Te6edf3provider Tff7b72= Te6edf3providerTb4b4b4,
Te6edf3canDiscardMissingSelection Tff7b72= Te6edf3provider Tff7b72=Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3providerLoadSuccessfulTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72internal Tff7b72fun Te6edf3CustomTileProviderConfigTb4b4b4.Td2a8ffhasValidGoogleTileSourceTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72=
Te6edf3isLocal Tff7b72|Tff7b72| Te6edf3urlTemplateTb4b4b4.Te6edf3isValidTileUrlTemplateTb4b4b4(Te6edf3requireHttps Tff7b72= Tff7b72falseTb4b4b4)
Tff7b72private Tff7b72fun Te6edf3GoogleCameraPositionTb4b4b4.Td2a8fftoCameraPositionTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3CameraPositionTb4b4b4(Te6edf3LatLngTb4b4b4(Te6edf3targetLatTb4b4b4, Te6edf3targetLngTb4b4b4)Tb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3tiltTb4b4b4, Te6edf3bearingTb4b4b4)
Tff7b72private Tff7b72fun Te6edf3CameraPositionTb4b4b4.Td2a8fftoMapCameraPositionTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3GoogleCameraPositionTb4b4b4(
Te6edf3targetLat Tff7b72= Te6edf3targetTb4b4b4.Te6edf3latitudeTb4b4b4,
Te6edf3targetLng Tff7b72= Te6edf3targetTb4b4b4.Te6edf3longitudeTb4b4b4,
Te6edf3zoom Tff7b72= Te6edf3zoomTb4b4b4,
Te6edf3tilt Tff7b72= Te6edf3tiltTb4b4b4,
Te6edf3bearing Tff7b72= Te6edf3bearingTb4b4b4,
Tb4b4b4)
Served by rngit 1.5.0 - Generated in 0.15s